/**
 * 解析url参数
 * @example ?id=12345&a=b
 * @return Object {id:12345,a:b}
 */
function urlParse(url) {
  const obj = {}
  const reg = /[?&][^?&]+=[^?&]+/g
  const arr = url.match(reg)
  if (arr) {
    arr.forEach((item) => {
      const tempArr = item.substring(1).split('=')
      const key = decodeURIComponent(tempArr[0])
      const val = decodeURIComponent(tempArr.splice(1).join('='))
      obj[key] = val
    })
  }
  return obj
}

function getNetworkType() {
  uni.getNetworkType({
    success: (res) => {
      if (res.networkType === 'none') {
        uni.showToast({
          title: '网络好像有点问题,请检查后重试！',
          duration: 2000,
          icon: 'none',
        })
        const pages = getCurrentPages()
        if (pages.length) {
          const route = pages[pages.length - 1].route
          if (route !== 'pages/empty/empty') {
            uni.navigateTo({
              url: '/pages/empty/empty?type=wifi',
            })
          }
        }
        else {
          uni.navigateTo({
            url: '/pages/empty/empty?type=wifi',
          })
        }
      }
    },
  })
}

function throttle(fn, that, gapTime) {
  // export function throttle(fn, gapTime) {
  if (gapTime == null || gapTime == undefined)
    gapTime = 1800

  const _lastTime = that.lastTime
  const _nowTime = +new Date()
  if (_nowTime - _lastTime > gapTime || !_lastTime) {
    fn.apply(that, arguments) // 将this和参数传给原函数
    that.lastTime = _nowTime
  }
}

/**
 * 计算传秒数的倒计时【天、时、分、秒】
 * @param seconds
 * @returns {{day : *, hours : *, minutes : *, seconds : *}}
 */
function countTimeDown(seconds) {
  const leftTime = (time) => {
    if (time < 10)
      time = `0${time}`
    return `${time}`
  }
  return {
    day: leftTime(Number.parseInt(seconds / 60 / 60 / 24, 10)),
    hours: leftTime(Number.parseInt((seconds / 60 / 60) % 24, 10)),
    minutes: leftTime(Number.parseInt((seconds / 60) % 60, 10)),
    seconds: leftTime(Number.parseInt(seconds % 60, 10)),
  }
}

/**
 * 计算当前时间到第二天0点的倒计时[秒]
 * @returns {number}
 */
function theNextDayTime() {
  const nowDate = new Date()
  const time
    = new Date(
      nowDate.getFullYear(),
      nowDate.getMonth(),
      nowDate.getDate() + 1,
      0,
      0,
      0,
    ).getTime() - nowDate.getTime()
  return Number.parseInt(time / 1000)
}

export {
  getNetworkType,
  throttle,
  countTimeDown,
  theNextDayTime,
}
